
package cn.lsh.spark.sql;

public class Test {

	public static void main(String[] args) {
		//入参是是B对象，对应其父类的入参的方法
		B b = new B();
		say(new B());
		//入参是匿名内部类，对应say(F<?> f),而不是say(Caller b)
		F<B> f = B::new;
		say(B::new);
		//入参是匿名内部类，对应Caller对象的入参的方法
		Caller caller = String::length;
		say(String::length);
	}

	public static void say(Caller b) {
		System.out.println(b.call("Caller"));
	}

	public static void say(F<?> f) {
		System.out.println(f.call());
	}

}

interface Caller {
	int call(String s);
}

class B implements Caller{

	@Override
	public int call(String s) {
		return 1;
	}
}

interface F<R> {
	R call();
}

